.. _Evaluate NeurEco Discrete Dynamic model with the Python API:

Evaluate NeurEco Discrete Dynamic model with the Python API
=============================================================

To evaluate a NeurEco Discrete Dynamic model in Python API, import **NeurEcoDynamic** library:

.. code-block:: python

  from NeurEco import NeurEcoDynamic as Dynamic
	
Initialize a NeurEco object to handle the **Discrete Dynamic** problem:

.. code-block:: python

  model = Dynamic.DiscreteDynamic()
	
:std:ref:`Build NeurEco Discrete Dynamic model with the Python API` or load previously build and saved to *"the/path/to/the/saved/discrete/dynamic/model.ernn"* model:

.. code-block:: python

  model.load("the/path/to/the/saved/discrete/dynamic/model.ernn")

Once **model** contains a Discrete Dynamic model, call method **evaluate** with the parameters set accordingly to the data to evaluate:	

.. code-block:: python

  model.evaluate(time, excitations,
               init_time=None,
               init_excitations=None,
               init_outputs=None)


Evaluates a Dynamic model.

:time: list of NumPy column arrays or a column NumPy array
:excitations: list of NumPy excitations arrays or a excitations NumPy array corresponding to **time** parameter
:init_time: list of initial time column arrays or initial time column array
:init_excitations: list of initial excitations arrays or initial excitations array
:init_outputs: list of initial outputs arrays or initial outputs array
:return: list of output NumPy arrays if multi-trajectory evaluation, NumPy array if single trajectory evaluation

For more information on the data format, see :std:ref:`Data preparation for NeurEco Discrete Dynamic python`.

Evaluation of a Dynamic model requires initialization. This initialization can be done in two ways:

1. Recommended: provide explicitly the initialization of the trajectory to evaluate.
   The provided initialization contains:

   * Required: the initial outputs ** init_outputs** of the trajectory to evaluate
   * Optional: the excitations **init_excitations** and the timesteps **init_time** that correspond to these points

2. If explicit initialization is not provided, NeurEco uses the Steady State Initialization: the beginning of the trajectory is computed from the steady state deduced from the model.
